#include "Channel.h"

using namespace devem;

// EPOLLPRI：有紧急数据可读时被触发，通常用于带外数据
// EPOLLRDHUP: 表示对方关闭了连接或者是写操作，此时这一方需要读数据，所以还是调用读事件回调
// EPOLLHUP:
// 与某个文件描述符相关的socket连接被对方关闭或者重置，或因为某种错误而关闭了连接，表示文件描述符被挂断，一般该事件触发表示文件描述符已经不再可用

void Channel::HandleEvent() {
    // 错误
    if ((events_ & EPOLLHUP) || (events_ & EPOLLERR) && error_callback_) {
        error_callback_();
    }
    // 读
    else if ((events_ & EPOLLOUT) && read_callback_) {
        read_callback_();
    }
    // 写
    else if ((events_ & EPOLLIN) && write_callback_) {
        write_callback_();
    }
    // 其他
    else if (events_ & EPOLLHUP) {
        // close
    } else {
        // todo...
    }
}